// 二叉树解题的思维模式分为两类：

// 1. 是否可以通过遍历一遍二叉树的到答案？
// 
// 如果可以，用一个traverse()函数配合外部变量来实现，这叫遍历的思维模式。

// 2. 是否可以定义一个递归函数，通过子问题的答案推导出原问题的答案？
//
// 如果可以，写出这个递归函数的定义，并充分利用这个函数的返回值，这叫分解问题的思维模式。

// 无论哪种思维模式，你都需要思考：

// 如果单独抽出一个二叉树节点，它需要做什么事情？需要在什么时候（前中后序位置）做？其他节点不用操心，递归函数会帮我们在所有节点上执行相同的操作。



// 前序位置的代码只能从函数参数中获取父节点传递来的数据，而后序位置的代码不仅可以获取参数数据，还可以获取到子树通过函数返回值传递过来的数据。
// 一旦发现题目和子树有关，那么大概率要给函数设置合理的定义和返回值，在后序位置写代码了。


